home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
prog_d
/
isamexpt.zip
/
UUSEISAM.INT
< prev
next >
Wrap
Text File
|
1996-04-05
|
11KB
|
311 lines
unit Uuseisam;
interface
USES Filer, UToolDll, isamtool;
procedure DIEE; { Fehlerkontrolle / Displays errormessage}
Procedure DIE;
function IA:boolean; {Testet, ob Dialog-Meldung vorliegt und löscht sie
tests and deletes dialog-message}
function NotFound:boolean; {Testet, ob bei letzter Op. "nicht gef." herauskam
true, if last skip failed}
const Isamwsnr : Longint = 1;
MySAVE : Boolean = FALSE;
var
SatzNoAngel : longint;
IsamFehler : Integer Absolute IsamError;
InitCount : Integer;
type
KeyProc = Function{(var DSatz;KeyNr:INTEGER):String;}
( Var DSatz;
KeyNr : Word ) : IsamKeyStr;
ChangeProc = Function(var DatOld,DatNew;Len:word):boolean;
PROCEDURE EXITIsam; { releases memory, when leaving ISAM}
Function INITIsam(Netz:NetSupportType) : Boolean;
{ checks memory and inits ISAM}
PROCEDURE CLEARKEY(VAR IFBPtr : ISAMFILEBLOCKPTR;KEY: INTEGER);
{Setzt den Datensatzzeiger auf den 1. Schlüssel von Key
Record-Pointer is set to first position
IFBPtr : Dateivariable
Key : Keynummer
}
PROCEDURE READLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
{Setzt ein READLOCK auf die Datei
IFBPtr : Dateivariable
}
PROCEDURE LOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
{Setzt ein LOCK auf die Datei
IFBPtr : Dateivariable
}
PROCEDURE UNLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
{Hebt den READLOCK auf
IFBPtr : Dateivariable
}
procedure SatzLesen (Var IFBPtr : IsamFileBlockPtr;RefNr:longint;
var Ziel,Dup);
{Liest einen Satz aus der angegebenen Isam-Datei.
reads record form isam-table
IFBPtr : Dateivariable / file-pointer
RefNr : Datensatznummer des zu lesenden Satzes
->Record-Number
Ziel : Variable, in der der Satz gespeichert werden soll
variable, where record is stored
Dup : muß vom selben Typ wie Ziel sein. Wird von den Schreibprozeduren
verwendet, um festzustellen, ob der Satz inzwischen verändert
wurde. Darf daher nicht von Hand verändert werden.
->same type as ZIEL to check whether record is changed
by other user.
Bitte anschließend IsamOK beachten.
Fehlermöglichkeiten: wie bei GetNetRec.
}
procedure SatzAendern(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
Var Quelle,Dup;Keys:KeyProc;var OK:boolean);
{Schreibt einen geänderten Satz zurück in die Isam-Datei.
saves changed record into isamfile.
IFBPtr : Dateivariable
RefNr : Datensatznummer des zurückzuschreibenden Satzes
-> record-number
Quelle : zu schreibender Satz
-> record to store
Dup : muß das von SatzLesen erzeugte Duplikat des alten Satzes enthalten
-> duplicate of record, to check for changes by other users.
Keys : Zeiger auf eine Funktion, die die Datensatzschlüssel ermittelt.
-> pointer to KEYPROC
(s. Anmerkungen zu "type KeyProc" weiter oben.)
OK : enthält OK nach der Ausführung FALSE, so konnte nicht geschrieben
werden, weil der Satz inzwischen verändert wurde oder weil das Än-
dern einen doppelten Hauptschlüssel zur Folge hätte.
-> true if record could be saved, false if record was changed by
other user.
Bitte anschließend IsamOk und OK beachten.
Fehlermöglichkeiten: wie bei LockFileBlock, GetNetRec, PutNetRec,
DeleteKey, AddKey, UnlockFile sowie siehe OK.
}
procedure SatzAnlegen(Var IFBPtr:IsamFileBlockPtr;
var Quelle;Keys:KeyProc);
{Legt einen Satz an.
-> saves new record to isamfile.
IFBPtr : Dateivariable
Quelle : zu schreibender Satz
-> record, that is to be saved
Keys : s. SatzAendern, type KeyProc
Bitte anschließend IsamOK beachten.
Fehlermöglichkeiten: wie bei LockFileBlock, AddNetRec, AddKey,
UnlockFile.
}
procedure Satzloeschen(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
var Dup;Keys:KeyProc;var OK:boolean);
{Löscht einen Satz.
-> deletes record described by record-number
IFBPtr : Dateivariable
RefNr : Nummer des zu löschenden Satzes
-> record-number of record to be deleted
Dup : s. SatzAendern
Keys : s. SatzAendern, type KeyProc
OK : s. SatzAendern
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten: s. SatzAendern
}
procedure DateiOeffnen (var IFBPtr:IsamFileBlockPtr;Name:String;Save:boolean;
RSize:longint);
{Öffnet einen Fileblock.
-> opens fileblock
IFBPtr : Dateivariable
Name : Pfad+Vorname der Datei
-> path and filename of table (without extent!)
Save : TRUE, wenn im Savemodus geöffnet werden soll
-> true, if open in SAVE-MODE.
RSize : Datensatzrecordgröße. Dient der Kontrolle, ob Programm- und
Dateiversion kompatibel sind.
-> sizeof(record) to reserve enough memory
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie Open(Save)NetFileBlock.
}
procedure DateiSchliessen (var IFBPtr:IsamFileBlockPtr);
{Schließt einen Fileblock.
-> closes isamfile
IFBPtr : Dateivariable
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei CloseNetFileBlock.
}
procedure KeySuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
var Userdatref:Longint;var Userkey:IsamKeyStr;
var Found:boolean);
{Sucht einen Schlüssel.
-> searches for key.
IFBPtr : Dateivariable
Key : Schlüsselnummer
-> keynumber
UserdatRef : erhält die Datensatznummer des gefundenen Schlüssels
-> returns recordnumber
UserKey : zu suchender Schlüssel
-> key that should be found
Found : TRUE: gewünschter Schlüssel wurde gefunden.
-> true, if found
FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
-> false, if not found, because:
IsamOK=TRUE: er nicht existiert. Userkey enthält den nächsten
größeren Schlüssel.
-> Key doesn't exist
IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
führt werden konnte.
-> a DOSERROR occured
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei SearchKey.
}
procedure RefSuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
var Userdatref:Longint;var Userkey:IsamKeyStr;
var Found:boolean);
{Sucht einen Schlüssel mit Referenz.
-> searches for key with reference
IFBPtr : Dateivariable
Key : Schlüsselnummer
-> keynumber
UserdatRef : Datensatznummer des zu suchenden Schlüssels
-> recordnumber of key that is to be searched for
UserKey : zu suchender Schlüssel
-> keystring
Found : TRUE: gewünschter Schlüssel wurde gefunden.
-> true, if found
FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
-> false, if not found, because ...
IsamOK=TRUE: er nicht existiert. Userkey enthält den nächsten
größeren Schlüssel.
-> Key doesn't exist, Key returns nearest greater key
IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
führt werden konnte.
-> a DOSERROR or ISAMERROR occurred
Bitte anschließend IsamOk beachten.
}
procedure SatzEinlesen(var IFBPtr:IsamFileBlockPtr;Key:integer;
var Satz,Dup;Keys:KeyProc;var Klar:boolean);
{Liest einen Satz ein. Funktionsweise: Die Felder der Variablen "Satz", die
bekannt sind, müssen vor Aufruf besetzt werden (z.B. das Kundennummernfeld,
wenn nach einer Kundennummer gesucht werden soll). Diese Prozedur sucht
dann den passenden Satz und liest ihn ein.
-> reads a record from isamtable. Function: those fields of the variable
"SATZ", that are already known, must be declared before, i.e. Name
or ZIP-Field, matching record will be searched
IFBPtr : Dateivariable
Key : Nummer das Schlüssels, anhanddessen gesucht werden soll
-> Key-Number
Satz : s.o., erhält hinterher den kompletten Satz
-> incomplete Record before search, complete record will be returned
if found
Dup : s. SatzLesen
Keys : s. SatzAendern, type KeyProc
Klar : TRUE, wenn der Satz gefunden und ordnungsgemäß gelesen wurde
-> true, if found and read without errors
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei SearchKey, GetNetRec.
}
const
FindFirst = 0;
FindLast = 1;
FindNext = 2;
FindPrev = 3;
FindALL = 4;
procedure NachbarKey(var IFBPtr:IsamFileBlockPtr;Key:integer;
var UserDatRef:longint;var UserKey:IsamKeyStr;
SuchArt:byte);
{Sucht den nächsten bzw. vorigen Schlüssel.
-> skips to next or previous key
IFBPtr : Dateivariable
Key : Schlüsselnummer -> keynumber
UserDatRef : erhält die Datensatznummer des gefundenen Schlüssels
-> returns recordnumber of record found
UserKey : erhält den gefundenen Schlüssel
-> returns keystring of record found
SuchArt : 0=der erste Schlüssel wird gesucht
-> first key (top of file)
1=der letzte Schlüssel wird gesucht
-> last key (end of file)
2=der nächste Schlüssel wird gesucht
-> next key
3=der vorige Schlüssel wird gesucht
-> previous key
4=der erste übereinstimmende Schlüssel (FINDKEY) wird gesucht
-> first key nearly matching
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei NextKey, PrevKey, ClearKey.
}
procedure DeleteAllRecs(var IFBPtr : IsamFileBlockPtr;
VonKey,
BisKey : IsamKeyStr;
Key : integer;
Keys : KeyProc);
{Löscht alle Datensätze, die im angegebenen Bereich von Schlüsseln liegen.
-> deletes all records
IFBPtr : bezogener FileBlock
VonKey : kleinster Schlüssel, der gelöscht werden soll
-> lowest key to be deleted
BisKey : kleinster Schlüssel, der nicht mehr gelöscht werden soll
(also obere Grenze, bleibt selbst aber erhalten)
-> highest key to be deleted
Key : Schlüsselnummer.
}
procedure LockFile(Var IFBPtr:IsamFileBlockPtr);
procedure UnlockFile(var IFBPtr:IsamFileBlockPtr);
{Achtung: Vor KeysAendern LOCKFILE!!!}
procedure KeysAendern(var IFBPtr:IsamFileBlockPtr;var Quelle,Dup;
RefNr:longint;Keys:KeyProc;var OK:boolean);
const ErrorFile:String = '';
var
NetInUse : boolean;
type
PrPrTyp = procedure (s:String);
var
PrPr : PrPrTyp;
const
IsamAntwort : word = 0;
implementation